From d47c3ac9e41c2933042f8225d1f9a821b5a599c8 Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Fri, 6 Jan 2012 10:53:57 -0500 Subject: [PATCH] GtkBuilder: support parsing GVariant properties https://bugzilla.gnome.org/show_bug.cgi?id=667394 --- gtk/gtkbuilder.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index fc8d0f9196..23eded4298 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -1409,6 +1409,31 @@ gtk_builder_value_from_string (GtkBuilder *builder, return TRUE; } + /* + * GParamSpecVariant can specify a GVariantType which can help with + * parsing, so we need to take care of that here. + */ + if (G_IS_PARAM_SPEC_VARIANT (pspec)) + { + GParamSpecVariant *variant_pspec = G_PARAM_SPEC_VARIANT (pspec); + const GVariantType *type; + GVariant *variant; + + g_value_init (value, G_TYPE_VARIANT); + + /* The GVariant parser doesn't deal with indefinite types */ + if (g_variant_type_is_definite (variant_pspec->type)) + type = variant_pspec->type; + else + type = NULL; + + variant = g_variant_parse (type, string, NULL, NULL, error); + if (variant == NULL) + return FALSE; + g_value_take_variant (value, variant); + return TRUE; + } + return gtk_builder_value_from_string_type (builder, G_PARAM_SPEC_VALUE_TYPE (pspec), string, value, error); @@ -1564,6 +1589,17 @@ gtk_builder_value_from_string_type (GtkBuilder *builder, case G_TYPE_STRING: g_value_set_string (value, string); break; + case G_TYPE_VARIANT: + { + GVariant *variant; + + variant = g_variant_parse (NULL, string, NULL, NULL, error); + if (value != NULL) + g_value_take_variant (value, variant); + else + ret = FALSE; + } + break; case G_TYPE_BOXED: if (G_VALUE_HOLDS (value, GDK_TYPE_COLOR)) { -- 2.30.2